{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 3.3  ],\n",
       "       [ 4.4  ],\n",
       "       [ 5.5  ],\n",
       "       [ 6.71 ],\n",
       "       [ 6.93 ],\n",
       "       [ 4.168],\n",
       "       [ 9.779],\n",
       "       [ 6.182],\n",
       "       [ 7.59 ],\n",
       "       [ 2.167],\n",
       "       [ 7.042],\n",
       "       [10.791],\n",
       "       [ 5.313],\n",
       "       [ 7.997],\n",
       "       [ 3.1  ]], dtype=float32)"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168],\n",
    "                    [9.779], [6.182], [7.59], [2.167], [7.042], [10.791],\n",
    "                    [5.313], [7.997], [3.1]], dtype=np.float32)\n",
    "x_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573],\n",
    "                    [3.366], [2.596], [2.53], [1.221], [2.827], [3.465],\n",
    "                    [1.65], [2.904], [1.3]], dtype=np.float32)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = torch.from_numpy(x_train)\n",
    "y_train = torch.from_numpy(y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SimpleLinearRegression(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(SimpleLinearRegression,self).__init__()\n",
    "        self.linear = nn.Linear(1,1)\n",
    "    def forward(self,x):\n",
    "        out = self.linear(x)\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = SimpleLinearRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "criterion = nn.MSELoss()\n",
    "optimizer = optim.SGD(model.parameters(),lr = 0.01)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_epochs = 1000\n",
    "for epoch in range(num_epochs):\n",
    "    inputs = x_train\n",
    "    targets = y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "outputs = model(inputs)\n",
    "loss = criterion(outputs,targets)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer.zero_grad()\n",
    "loss.backward()\n",
    "optimizer.step()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch [1000/1000], Loss: 12.1543\n"
     ]
    }
   ],
   "source": [
    "if (epoch+1) % 50 == 0:\n",
    "    print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Predicted: [[1.7618666]\n",
      " [2.1523216]\n",
      " [2.5427766]\n",
      " [2.9722772]\n",
      " [3.050368 ]\n",
      " [2.069971 ]\n",
      " [4.0616465]\n",
      " [2.7848587]\n",
      " [3.2846413]\n",
      " [1.3596978]\n",
      " [3.0901234]\n",
      " [4.420865 ]\n",
      " [2.4763992]\n",
      " [3.4291096]\n",
      " [1.6908746]]\n"
     ]
    }
   ],
   "source": [
    "model.eval()\n",
    "with torch.no_grad():\n",
    "    predicted = model(x_train)\n",
    "    print('Predicted:', predicted.detach().numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "mat1 = torch.tensor([[1, 2], [3, 4]])  \n",
    "mat2 = torch.tensor([[5, 6], [7, 8]], dtype=torch.float32)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "mat2 = mat2.to(mat1.dtype)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "result = torch.matmul(mat1, mat2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[19, 22],\n",
       "        [43, 50]])"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7ff719f8dc00>"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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6unpGfY127dv16JFi3Tbbbdpz549qq6uVnV1tfbt2zfm4gEAgPt5LGuo+4COzIcffqj8/Hy1trbq6quvHnLOzTffrJ6eHq1bt25gbNasWZo5c6ZWrFgxoveJx+Py+/2KxWLKy8sbbbkAAGAcjfT7e0zXjMRiMUnS5MmTh52zY8cOzZs3L2nshhtu0I4dO4Z9TW9vr+LxeNIDAABkplGHkb6+PtXV1WnOnDmaPn36sPO6u7tVUFCQNFZQUKDu7u5hX1NfXy+/3z/wCIVCoy0TAAA43KjDSE1Njfbt26fVq1ensx5J0rJlyxSLxQYenZ2daX8PAADgDKPqwLp06VKtW7dOW7duVTAYPOncwsJCHT58OGns8OHDKiwsHPY1Pp9PPp9vNKUBAACXSWllxLIsLV26VC0tLdq8ebNKS0tP+Zry8nJt2rQpaWzjxo0qLy9PrVIAAJCRUloZqampUVNTk9auXavc3NyB6z78fr9ycnIkSYsXL1ZxcbHq6+slSbW1tZo7d66eeuop3XjjjVq9erV2796tlStXpvlXAQAAbpTSykhjY6NisZgqKysVCAQGHn/+858H5nR0dCgajQ48nz17tpqamrRy5Updeumlam5u1po1a0560SsAAMgeY+ozMl7oMwIAgPuMS58RAACAsSKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACMIowAAACjCCMAAMAowggAADCKMAIAAIyaaLoAjI9EQmprk6JRKRCQKiokr9d0VQAAEEayQiQi1dZKhw59PhYMSsuXS+GwubqA04kADrgHp2kyXCQiLVyYHEQkqavLHo9EzNQFnE6RiHT++dI110j/93/2v+efz/93wKkIIxkskbBXRCxr8LH+sbo6ex6QKQjggPsQRjJYW9vgP8jHsyyps9OeB2QCAjjgToSRDBaNpnce4HQEcMCdCCMZLBBI7zzA6QjggDuxmyaDVVTYu2a6uoZetvZ47OMVFeNfGwZj98fYEcABd2JlJIN5vfb2XckOHsfr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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x_train.numpy(), y_train.numpy(), color='blue', label='Actual')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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f+wvnr9HTXVE6rGAFQAAWIowAgAALBXTYSQxMVH//d//rcTERKtLQQB8f+yP75G98f2xP75HoXHEAlYAABC7YrozAgAA7I8wAgAALEUYAQAAliKMAAAAS8VcGCkuLtZll12m5ORkpaWlKTc3V3v37rW6LATx+OOPy+VyqaioyOpS0EhFRYV++MMfqkuXLmrfvr0GDBigHTt2WF0WvuH1enX//ferZ8+eat++vXr16qWZM2ee8f4faD0bN27UhAkT1LVrV7lcLi1btsz0eZ/PpwceeECZmZlq3769xowZo48//tiaYm0o5sLIhg0bVFBQoG3btmnNmjWqra3Vtddeq5qaGqtLw2m2b9+uF154QQMHDrS6FDTy5ZdfatiwYWrXrp1Wrlyp//mf/9GsWbPUqVMnq0vDN5544gnNnTtXzz77rP7973/riSee0JNPPqk//OEPVpcWt2pqanTRRRfpueeeC/j5J598Us8884zmzZund999Vx07dtTYsWN14sSJKFdqTzF/ae/nn3+utLQ0bdiwQVdddZXV5eAbR48e1aBBg/T888/rkUce0cUXX6zZs2dbXRYk3XvvvfrHP/6hTZs2WV0Kgvjud7+r9PR0/fGPf2wY+8EPfqD27dtr4cKFFlYGSXK5XFq6dKlyc3MlGV2Rrl276u6779avf/1rSVJ1dbXS09O1YMEC3XzzzRZWaw8x1xk5XXV1tSSpc+fOFleCxgoKCjR+/HiNGTPG6lJwmr/97W+69NJLdcMNNygtLU2XXHKJXnzxRavLQiNDhw7V2rVr9dFHH0mS/vWvf2nz5s0aN26cxZUhkP3796uqqsr08y41NVXf+c53tHXrVgsrsw9H3Civuerq6lRUVKRhw4apf//+VpeDbyxatEg7d+7U9u3brS4FAezbt09z587VXXfdpfvuu0/bt2/Xr371K5111lmaNm2a1eVBRvfK7XarT58+SkhIkNfr1aOPPqopU6ZYXRoCqKqqkiSlp6ebxtPT0xs+F+9iOowUFBRoz5492rx5s9Wl4Bvl5eUqLCzUmjVrlJSUZHU5CKCurk6XXnqpHnvsMUnSJZdcoj179mjevHmEEZv461//qtdee00lJSXq16+fdu3apaKiInXt2pXvERwpZqdppk+frhUrVuidd95Rdna21eXgG++9954+++wzDRo0SG3btlXbtm21YcMGPfPMM2rbtq28Xq/VJca9zMxMXXjhhaaxvn37qqyszKKKcLp77rlH9957r26++WYNGDBAP/rRj3TnnXequLjY6tIQQEZGhiTp8OHDpvHDhw83fC7exVwY8fl8mj59upYuXap169apZ8+eVpeERkaPHq3du3dr165dDY9LL71UU6ZM0a5du5SQkGB1iXFv2LBhfpfDf/TRR+revbtFFeF0x44dU5s25h/fCQkJqqurs6giNKVnz57KyMjQ2rVrG8bcbrfeffddDRkyxMLK7CPmpmkKCgpUUlKi5cuXKzk5uWE+LjU1Ve3bt7e4OiQnJ/ut3+nYsaO6dOnCuh6buPPOOzV06FA99thjuvHGG/XPf/5T8+fP1/z5860uDd+YMGGCHn30UXXr1k39+vXT+++/r6efflo/+clPrC4tbh09elSffPJJw/P9+/dr165d6ty5s7p166aioiI98sgjuuCCC9SzZ0/df//96tq1a8MVN3HPF2MkBXy88sorVpeGIEaMGOErLCy0ugw08ve//93Xv39/X2Jioq9Pnz6++fPnW10SGnG73b7CwkJft27dfElJSb7zzjvP95vf/Mbn8XisLi1uvfPOOwHPPdOmTfP5fD5fXV2d7/777/elp6f7EhMTfaNHj/bt3bvX2qJtJOb3GQEAAPYWc2tGAACAsxBGAACApQgjAADAUoQRAABgKcIIAACwFGEEAABYijACAAAsRRgBAACWIowAAABLEUYAAIClCCMAAMBShBEAAGCp/w/ZcSRHvPlLxAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.eval()\n",
    "with torch.no_grad():\n",
    "    predicted = model(x_train)\n",
    "    plt.plot(x_train.numpy(), predicted.numpy(), color='red', label='Predicted')\n",
    "   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGwCAYAAABVdURTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABARUlEQVR4nO3de1yUdd7/8feIiqiARw4KCpveno/ZAbvNc6XWLZG7qZW2lfurxQ2qdcvuu93WStq63bS1NMvWtjJLQyvTTC0EU8tDdmtblmWCCGq7xogHxGF+f1yBjDMg6Mxc18y8no/HPHC+XDN8OMi8+Xy/1/eyOZ1OpwAAAIJEA7MLAAAA8CbCDQAACCqEGwAAEFQINwAAIKgQbgAAQFAh3AAAgKBCuAEAAEGlodkF+FtFRYUOHjyoyMhI2Ww2s8sBAAB14HQ6dezYMbVr104NGtTemwm5cHPw4EElJiaaXQYAALgABQUFSkhIqPWYkAs3kZGRkowvTlRUlMnVAACAurDb7UpMTKx6Ha9NyIWbyqmoqKgowg0AAAGmLktKWFAMAACCCuEGAAAEFcuEmyeffFI2m02ZmZk1HrNo0SLZbDaXW5MmTfxXJAAAsDxLrLnZunWrXnjhBfXu3fu8x0ZFRWnPnj1V9311OrfD4VB5eblPnhu+16hRI4WFhZldBgDABKaHm9LSUt1yyy168cUX9fjjj5/3eJvNpri4OJ/V43Q6VVxcrJ9++slnHwP+0aJFC8XFxbGfEQCEGNPDTXp6usaMGaMRI0bUKdyUlpaqY8eOqqioUP/+/TVz5kz16NGjxuPLyspUVlZWdd9ut9f6/JXBJiYmRk2bNuWFMQA5nU6dOHFChw8fliTFx8ebXBEAwJ9MDTdLlizRjh07tHXr1jod36VLF7388svq3bu3SkpK9L//+78aOHCgvvzyyxo39MnKytKf//znOj2/w+GoCjatW7eu8+cB64mIiJAkHT58WDExMUxRAUAIMW1BcUFBgTIyMvT666/XeVFwSkqKJk2apL59+2rw4MHKzs5W27Zt9cILL9T4mOnTp6ukpKTqVlBQUOOxlWtsmjZtWr9PBpZU+X1k7RQAhBbTOjfbt2/X4cOH1b9//6oxh8Oh3NxczZ07V2VlZef9a7tRo0bq16+f9u7dW+Mx4eHhCg8Pr1dtTEUFB76PABCaTAs3w4cP165du1zGfv3rX6tr16568MEH6zSN4HA4tGvXLo0ePdpXZQIAgABjWriJjIxUz549XcaaNWum1q1bV41PmjRJ7du3V1ZWliRpxowZuvLKK9WpUyf99NNPevrpp7V//37dddddfq8fAABYk2U28fMkPz9fRUVFVfePHj2qKVOmqFu3bho9erTsdrs2bdqk7t27m1hlaLn99tuVmppadX/IkCG1brzoKzk5ObLZbJyyDwBwY/qp4NXl5OTUev+ZZ57RM88847+CAsjtt9+uV155RZKxFqlDhw6aNGmSHn74YTVs6Ltvc3Z2tho1alSnY3NycjR06FAdPXpULVq08FlNAAATnTolhYdLJq57tHTnBvVz3XXXqaioSN9++60eeOABPfroo3r66afdjjt9+rTXPmarVq3qdPl5AECQO31aatpUioiQHnjA1FIIN+fjdErHj5tzczrrVWp4eLji4uLUsWNH3XPPPRoxYoTefffdqqmkJ554Qu3atVOXLl0kGafj/+pXv1KLFi3UqlUrjR07Vj/88EPV8zkcDt1///1q0aKFWrdurT/84Q9ynlPTudNSZWVlevDBB5WYmKjw8HB16tRJCxcu1A8//KChQ4dKklq2bCmbzabbb79dklRRUaGsrCwlJycrIiJCffr00bJly1w+zqpVq/Qf//EfioiI0NChQ13qBACYLC/P6NacPGncLy01tRxLTUtZ0okTUvPm5nzs0lKpWbMLfnhERIT+9a9/SZLWr1+vqKgorV27VpKx98u1116rlJQU5eXlqWHDhnr88cd13XXX6f/+7//UuHFjzZo1S4sWLdLLL7+sbt26adasWVq+fLmGDRtW48ecNGmSNm/erGeffVZ9+vTRvn379OOPPyoxMVFvv/22brrpJu3Zs0dRUVFVG+1lZWXptdde0/z589W5c2fl5ubq1ltvVdu2bTV48GAVFBQoLS1N6enp+s1vfqNt27bpAZP/KgAA/OzGG6UVK87eHzlSqmX/OX8g3AQhp9Op9evXa82aNfrd736nI0eOqFmzZnrppZfUuHFjSdJrr72miooKvfTSS1X7wfz9739XixYtlJOTo2uuuUazZ8/W9OnTlZaWJkmaP3++1qxZU+PH/eabb/TWW29p7dq1GjFihCTpF7/4RdX7W7VqJUmKiYmpWnNTVlammTNnat26dUpJSal6zMaNG/XCCy9o8ODBmjdvni655BLNmjVLkrFT9a5du/SXv/zFi181AEC9FBZK514dYO1a6eff/2Yi3JxP06bmtdfquVPyypUr1bx5c5WXl6uiokITJ07Uo48+qvT0dPXq1asq2EjSF198ob1797qtlzl16pS+++47lZSUqKioSFdccUXV+xo2bKgBAwa4TU1V2rlzp8LCwjR48OA617x3716dOHFCI0eOdBk/ffq0+vXrJ0n66quvXOqQVBWEAAAmmD1buu8+17GTJ6U6XnHA1wg352OzXdTUkD8NHTpU8+bNU+PGjdWuXTuXs6SanfM5lJaW6tJLL9Xrr7/u9jxt27a9oI9fOc1UH6U/B8f3339f7du3d3lffXeWBgD4WFmZ8ZrocJwde+opado082rygHATRJo1a6ZOnTrV6dj+/fvrzTffVExMjKKiojweEx8fr08//VRXX321JOnMmTPavn27yyUzquvVq5cqKiq0YcOGqmmp6io7R45q/ym6d++u8PBw5efn19jx6datm959912XsS1btpz/kwQAeE9OjvTziSFV8vOlxERTyqkNZ0uFqFtuuUVt2rTR2LFjlZeXp3379iknJ0f33nuvDhw4IEnKyMjQk08+qRUrVujrr7/Wb3/721o3zUtKStLkyZN1xx13aMWKFVXP+dZbb0mSOnbsKJvNppUrV+rIkSMqLS1VZGSkfv/73+u+++7TK6+8ou+++047duzQ3/72t6p9e+6++259++23mjZtmvbs2aPFixdr0aJFvv4SAQAqjRnjGmxGjzbO6LVgsJEINyGradOmys3NVYcOHZSWlqZu3brpzjvv1KlTp6o6OQ888IBuu+02TZ48WSkpKYqMjNSNN95Y6/POmzdP48aN029/+1t17dpVU6ZM0fHjxyVJ7du315///Gc99NBDio2N1dSpUyVJjz32mB555BFlZWWpW7duuu666/T+++8rOTlZktShQwe9/fbbWrFihfr06aP58+dr5syZPvzqAAAkSQUFxvKMVavOjn30kfT+++bVVAc2Z02rQ4OU3W5XdHS0SkpK3KZjTp06pX379ik5OVlNLLIoCheO7ycAXISnn5b+8Iez9xs2NE6wMWk9ZG2v3+dizQ0AADjr1Cljl+HqZs2S7r/fnHouAOEGAAAY1q9336emoMB9PxuLY80NAAChzumUrr3WNdj8138Z4wEWbCQ6NwAAhLb9+6WkJNexDRukn7cBCUR0bgAACFVZWa7BJiLC2KgvgIONROcGAIDQc/Kk+yV+5syR7r3XnHq8jHADAEAo+fBDY31NdQcPSvHx5tTjA0xLAQAQCpxOY5fh6sFm3DhjPIiCjUS4gR/YbDatWLHC7DIAIHTt2yc1aGBcH6rSxo3S0qWmleRLhJsgs3nzZoWFhWnMmDH1elxSUpJmz57tm6IAAOZ57DHpF784ez8qSjp9WrrqKvNq8jHCjY84HEZAfuMN4231q8P70sKFC/W73/1Oubm5OnjwoH8+KADAek6cMK4L9cc/nh177jmppERq1Mi8uvyAcOMD2dnGmXVDh0oTJxpvk5KMcV8qLS3Vm2++qXvuuUdjxoxxu3L2e++9p8suu0xNmjRRmzZtqi6COWTIEO3fv1/33XefbDabbDabJOnRRx9V3759XZ5j9uzZSqp22uDWrVs1cuRItWnTRtHR0Ro8eLB27Njhy08TAHA+q1dLzZq5jhUVSb/9rTn1+Bnhxsuys431WQcOuI4XFhrjvgw4b731lrp27aouXbro1ltv1csvv6zK66K+//77uvHGGzV69Gh9/vnnWr9+vS6//PKfa85WQkKCZsyYoaKiIhUVFdX5Yx47dkyTJ0/Wxo0btWXLFnXu3FmjR4/WsWPHfPI5AgBq4XRK//mf0ujRZ8fGjzfG4+LMq8vPOBXcixwOKSPD+Bk6l9NpdAczM6WxY6WwMO9//IULF+rWW2+VJF133XUqKSnRhg0bNGTIED3xxBMaP368/vznP1cd36dPH0lSq1atFBYWpsjISMXV84d/2LBhLvcXLFigFi1aaMOGDbr++usv8jMCANTZd99JnTq5jm3eLF15pTn1mIjOjRfl5bl3bKpzOo3rj+Xlef9j79mzR5999pkmTJggSWrYsKFuvvlmLVy4UJK0c+dODR8+3Osf99ChQ5oyZYo6d+6s6OhoRUVFqbS0VPn5+V7/WACAGvzxj67BpnVrY9FwCAYbic6NV9V1Nqcesz51tnDhQp05c0bt2rWrGnM6nQoPD9fcuXMVce7l6+ugQYMGVdNalcrLy13uT548Wf/61780Z84cdezYUeHh4UpJSdHp06cv7BMBANTd8eNS8+auYy+8IP3mN+bUYxGEGy+q6x5I3t4r6cyZM/rHP/6hWbNm6ZprrnF5X2pqqt544w317t1b69ev169//WuPz9G4cWM5zjmlq23btiouLpbT6axaZLxz506XYz755BM9//zzGv3z/G5BQYF+/PFHL31mAIAavfeeceXu6g4dkmJizKnHQgg3XjRokHFl+MJCz+tubDbj/YMGeffjrly5UkePHtWdd96p6Ohol/fddNNNWrhwoZ5++mkNHz5cl1xyicaPH68zZ85o1apVevDBByUZ+9zk5uZq/PjxCg8PV5s2bTRkyBAdOXJETz31lMaNG6cPPvhAq1evVlRUVNXzd+7cWa+++qoGDBggu92uadOmXVCXCABQR06nMd302WdnxyZNkl55xbyaLIY1N14UFmZcd0wygkx1lfdnz/b+YuKFCxdqxIgRbsFGMsLNtm3b1KpVKy1dulTvvvuu+vbtq2HDhumzav8xZsyYoR9++EGXXHKJ2rZtK0nq1q2bnn/+eT333HPq06ePPvvsM/3+9793+9hHjx5V//79ddttt+nee+9VDH81AIBvfPONsdNw9WDz2WcEm3PYnOcuqghydrtd0dHRKikpcelASNKpU6e0b98+JScnq0mTJhf8MbKzjbOmqi8uTkw0gk1a2gU/LerJW99PALCEhx+WsrLO3o+LM85SaRgakzC1vX6fKzS+In6Wlmac7p2XZywejo83pqJ8cfo3ACDIHTtmXDKhupdeku6805x6AgDhxkfCwqQhQ8yuAgAQ0FaskH7eTb7KkSNSmzamlBMoWHMDAIDVOJ1S//6uweaOO4xxgs150bkBAMBKvv5a6tbNdWz7diPsoE7o3HgQYmusgxbfRwAB5w9/cA02iYnSmTMEm3qic1NNo58vAX/ixAn2agkCJ06ckHT2+woAlmW3S+du57FokTR5sinlBDrCTTVhYWFq0aKFDh8+LElq2rRp1c68CBxOp1MnTpzQ4cOH1aJFC4VxmhoAK3v7bWncONexH380rg+FC0K4OUflVbErAw4CV4sWLep9lXMA8BuHw32Pmv/3/6T5882pJ4gQbs5hs9kUHx+vmJgYt4tEInA0atSIjg0A61q6VPrVr1zHPv9c6tvXlHKCDeGmBmFhYbw4AgC8z9NyhzNn2OnVizhbCgAAf9i/3z3YjBpl7F1DsPEqy4SbJ598UjabTZmZmbUet3TpUnXt2lVNmjRRr169tGrVKv8UCADAhUpLk5KSXMe+/17iNcwnLBFutm7d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KisrS3369NGcGn6pxMXF6dChQy5jhw4dUlxcXI3PHx4eXnU2VuUNAPS739UcbAAENNPDzbkqKipUVlbm8X0pKSlav369y9jatWtrXKMDAB7ZbNLcua5j339PsAGChKk7FE+fPl2jRo1Shw4ddOzYMS1evFg5OTlas2aNJGnSpElq3769srKyJEkZGRkaPHiwZs2apTFjxmjJkiXatm2bFixYYOanASBQ7Nkjde3qPk6oAYKKqeHm8OHDmjRpkoqKihQdHa3evXtrzZo1GjlypCQpPz9fDRqcbS4NHDhQixcv1v/8z//o4YcfVufOnbVixQr17NnTrE8BQKDwNAX14IPSk0/6vxYLcjikvDypqEiKj5cGDZLCwsyuCrgwltvnxtfY5wYIMU6n1MDDDHxo/eqrVXa2lJEhHThwdiwhwVhTnZZmXl1AdQG5zw0AeN1ddxFsziM7Wxo3zjXYSFJhoTGenW1OXcDFINwACE42m7RwoetYfj7BphqHw+jYePqSVI5lZhrHAYGEcAMguOzeXfMp3mzi6SIvz71jU53TKRUUGMcBgYRwAyB42GxSr16uYzNm0K2pQVGRd48DrMLUs6UAwCtYNHxB4uO9exxgFXRuAAS28eMJNhdo0CDjrChPs3iSMZ6YaBwHBBI6NwACl6dX5aIiqZZLsnhbIO8PExZmnO49bpzxpayeByu/tLNnB87nA1SicwMg8OzYUfOiYT8Gm+xsKSlJGjpUmjjReJuUFFinT6elScuWSe3bu44nJBjj7HODQMQmfgACi6dQ89RT0rRpfi2jcn+Yc3+DVpYXaMEgkDtQCA31ef0m3AAIDBUVnl9tTfgV5nAYHZqaTqO22YzOx759BATAW3y6Q/HkyZOVm5t7wcUBQL39139ZJthI7A8DWF29w01JSYlGjBihzp07a+bMmSosLPRFXQBgsNmk995zHTt82NSzodgfBrC2eoebFStWqLCwUPfcc4/efPNNJSUladSoUVq2bJnKy8t9USOAULRlS82Lhtu29X891bA/DGBtF3S2VNu2bXX//ffriy++0KeffqpOnTrptttuU7t27XTffffp22+/9XadgN85HFJOjvTGG8Zbrq/jRzablJLiOjZ3rmX2rmF/GMDaLupU8KKiIq1du1Zr165VWFiYRo8erV27dql79+565plnvFUj4HfBcIpvQHI4au7W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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.plot(x_train.numpy(), predicted.numpy(), color='red', label='Predicted')\n",
    "plt.scatter(x_train.numpy(), y_train.numpy(), color='blue', label='Actual')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "tensorflow",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
